<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>栈的封装</title>
  </head>
  <body>
    <script>
      // 封装栈类
      function Stack() {
        // 栈中的属性
        this.items = []

        // 栈的相关操作
        // 1.将元素压入栈
        Stack.prototype.push = function (element) {
          this.items.push(element)
        }

        // 2.从栈中取出元素
        Stack.prototype.pop = function () {
          return this.items.pop()
        }

        // 3.查看一下栈顶元素
        Stack.prototype.peek = function () {
          return this.items[this.items.length - 1]
        }

        // 4.判断栈是否为空
        Stack.prototype.isEmpty = function () {
          return this.items.length == 0
        }

        // 5.获取栈中元素的个数
        Stack.prototype.size = function () {
          return this.items.length
        }

        // 6.toString方法
        Stack.prototype.toString = function () {
          // 形式自定 1 2 3 4 5
          var resultString = ''
          this.items.forEach((element) => {
            resultString += element + ' '
          })
          return resultString
        }
      }

      // 栈的使用
      var s = new Stack()
      s.push(1)
      s.push(2)
      s.push(3)
      s.push(4)
      console.log(s.items) // [1,2,3,4]
      s.pop()
      console.log(s.items) // [1,2,3]
      console.log(s.peek()) // 3
      console.log(s.isEmpty()) // false
      console.log(s.size()) // 3
      console.log(s.toString()) // 1 2 3 (String)

      // 封装十进制转二进制的函数
      function dec2bin(decNumber) {
        // 1.定义栈对象，上文封装的栈类
        var stack = new Stack()
        // 2.循环操作
        while (decNumber > 0) {
          // 2.1获取余数，并且放入栈中
          stack.push(decNumber % 2)
          // 2.2更新decNumber，获取整除后的结果，作为下一次运行的数字
          decNumber = Math.floor(decNumber / 2)
        }
        // 3.从栈中取出0和1
        let binaryString = ''
        while (!stack.isEmpty()) {
          binaryString += stack.pop()
        }
        return binaryString
      }
      // 测试代码
      // console.log(dec2bin(10)) //1010
      // console.log(dec2bin(100)) //1100100
    </script>
  </body>
</html>
